<?php
/**
 * crcl/base
 *
 * Copyright 2013 CRCL - André Sabosch - info@crcl.de
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

namespace crcl\base\validator\container;

interface IMinlength
{
}

class ContainerMinlength extends Concrete implements IMinlength, IConcrete
{
  public function test($value)
  {
    $this->checkParams();
    if (!$this->is($value))
    {
      throw new Exception('Value is too short', Exception::ERROR_MINLENGTH_TOOSHORT,
        array('value' => $value, 'min' => $this->aParams['min'], 'length' => \strlen($value)));
    }

    return \TRUE;
  }

  public function is($value)
  {
    $this->checkParams();
    if (\strlen($value) < $this->aParams['min'])
    {
      return \FALSE;
    }
    return \TRUE;
  }

  /** PRIVATE *************************************************************************************/

  private function checkParams()
  {
    if (!isset($this->aParams['min']))
    {
      throw new Exception('Param missing', Exception::ERROR_PARAMMISSING,
        array('param' => 'min'));
    }
  }
}